<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 原型的作用就是共用方法
        // 1. 构造函数的问题
        function Star(uname, age) {
            this.uname = uname;
            this.age = age;
            // this.sing = function() {
            //     console.log('我会飞');
            // }
        }
        Star.prototype.sing = function() {
            console.log(this.uname + '我会飞');
            // 此时的this依旧指向Star
        }
        var ldh = new Star('刘德华', 18);

        var zxy = new Star('张学友', 19);
        // 缺点 浪费内存
        // console.dir(Star);
        ldh.sing();
        zxy.sing();
        // 2.一般情况下,我们的公共属性定义到构造函数里面,公共方法我们放到原型对象身上

        // 3.__proto__指向构造函数的原型对象prototype
        console.log(ldh);
        console.log(Star.prototype);
        console.log(ldh.__proto__);
        console.log(ldh.__proto__ === Star.prototype); //true

        // 方法的查找规则:首先先看ldh对象身上是否有sing方法，如果有就执行这个对象上的sing
        // 如果么有sing这个方法,因为有_ proto__ 的存在，就去构造函数原型对象prototype身 上去查找sing这个方法
    </script>
</body>

</html>